package com.common.app.utls

import android.graphics.Bitmap
import android.text.TextUtils
import android.util.Log
//import com.alibaba.sdk.android.oss.*
//import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback
//import com.alibaba.sdk.android.oss.callback.OSSProgressCallback
//import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider
//import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvider
//import com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider
//import com.alibaba.sdk.android.oss.internal.OSSAsyncTask
//import com.alibaba.sdk.android.oss.model.DeleteObjectRequest
//import com.alibaba.sdk.android.oss.model.DeleteObjectResult
//import com.alibaba.sdk.android.oss.model.ObjectMetadata
//import com.alibaba.sdk.android.oss.model.PutObjectRequest
//import com.alibaba.sdk.android.oss.model.PutObjectResult
import com.common.app.helper.UserHelper
import com.common.app.utls.Constants.bucketUrl
import com.common.base.R
import com.common.base.app.extras.no
import com.common.base.utils.AppUtils
import com.common.base.utils.AppUtils.getContext
import com.common.base.utils.ToastUtils
//import com.huawei.iiss.PasswdTools.dePwd
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.IOException
import java.io.InputStream
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale


/**
 *
 * 作者：sosou
 *
 * 版本：1.0
 *
 * 创建日期：24/2/2023
 *
 * 描述：阿里云OSS上传工具
 *
 * 修订历史：
 *
 */
class OssServiceUtil(securityToken: String) {
    private val objectKeyHeader = "strategy/"
    private var typeTag = "common/"
//    private var callback: picResultCallback? = null //回调接口
//    //初始化使用参数
//    private val securityToken: String
//
//    private var oss: OSS? = null
//    private var ossAsyncTask: OSSAsyncTask<*>? = null
//
//    init {
//        this.securityToken = securityToken
//        init()
//    }
//
//    private interface Cb {
//        fun success()
//        fun error()
//    }
//
//    private fun init(cb: Cb? = null) {
//        val credentialProvider: OSSCredentialProvider = if (!TextUtils.isEmpty(securityToken)) {
//            OSSStsTokenCredentialProvider(
//                dePwd(Constants.aliaccessKeyId),
//                dePwd(Constants.aliaccessKeySecret),
//                securityToken
//            )
//        } else {
//            //这个初始化安全性没有Sts安全，如需要很高安全性建议用OSSStsTokenCredentialProvider创建（上一行创建方式）多出的参数SecurityToken为临时授权参数
//            OSSPlainTextAKSKCredentialProvider(
//                dePwd(Constants.aliaccessKeyId),
//                dePwd(Constants.aliaccessKeySecret)
//            )
//        }
//        val conf = ClientConfiguration()
//        conf.connectionTimeout = 15 * 1000 // 连接超时，默认15秒
//        conf.socketTimeout = 15 * 1000 // socket超时，默认15秒
//        conf.maxConcurrentRequest = 8 // 最大并发请求数，默认5个
//        conf.maxErrorRetry = 2 // 失败后最大重试次数，默认2次
//        // oss为全局变量，endpoint是一个OSS区域地址
//        oss = OSSClient(getContext(), Constants.endpoint, credentialProvider, conf)
//    }
//
//    fun setResultCallBack(callback: picResultCallback?) {
//        this.callback = callback
//    }
//
//    fun upload(file: List<File>, mType: String? = "") {
//        if (oss == null) {
//            init(object : Cb {
//                override fun success() {
//                    up(file)
//                }
//
//                override fun error() {
//                    ToastUtils.showToast("上传失败!")
//                    callback?.onFailure()
//                }
//            })
//            return
//        }
//
//        mType.isNullOrEmpty().no {
//            typeTag = "$mType/"
//        }
//
//        val mPhone: String = UserHelper.getUser()?.Phone.toString()
//        mPhone.isEmpty().no {
//            typeTag = "$mPhone/$mType/"
//        }
//
//        up(file)
//    }
//
//    private fun up(files: List<File>) {
//        val count = files.size
//        val results: MutableList<String> = ArrayList(count)
//        val r: MutableList<String> = ArrayList()
//        files.forEach {
//            results.add("")
//            val index = files.indexOf(it)
//            val objectMeta = ObjectMetadata()
//            objectMeta.contentType = "image/jpeg"
//
//            // 构造上传请求
//            // 这里的objectKey其实就是服务器上的路径，即目录+文件名
//            val objectKey: String = objectKeyHeader + typeTag + it.name
//            val put = PutObjectRequest(Constants.bucket, objectKey, it.path)
//            put.metadata = objectMeta
//            try {
//                val putObjectResult = oss?.putObject(put)
//            } catch (e: ClientException) {
//                e.printStackTrace()
//                callback?.onFailure()
//            } catch (e: ServiceException) {
//                e.printStackTrace()
//                callback?.onFailure()
//            }
//
//            // 异步上传时可以设置进度回调
//            put.progressCallback =
//                OSSProgressCallback { request, currentSize, totalSize -> // 在这里可以实现进度条展现功能
//                    Log.d("PutObject", "currentSize: $currentSize totalSize: $totalSize")
//                }
//            oss?.asyncPutObject(
//                put,
//                object : OSSCompletedCallback<PutObjectRequest, PutObjectResult?> {
//                    override fun onSuccess(request: PutObjectRequest, result: PutObjectResult?) {
////                    Log.d("PutObject", "UploadSuccess");
////                    Log.d("ETag", result.getETag());
////                    Log.d("RequestId", result.getRequestId());
//
////                        //上传后获取地址：
////                        val prefix = "https://" + Constants.bucket + "." + Constants.endpoint + "/"
////                        //                    Log.d("prefix得值", prefix);
////                        val fileUrl = prefix + request.objectKey
//////                        val fileUrl:String = oss.presignPublicObjectURL(Constants.bucket, file.getName())
////                        results[index] = fileUrl
//                        results[index] = request.objectKey
//                        r.add("")
//                        if (r.size == count && callback != null) {
//                            callback?.getPicData(results)
//                        }
//                    }
//
//                    override fun onFailure(
//                        request: PutObjectRequest,
//                        clientExcepion: ClientException,
//                        serviceException: ServiceException
//                    ) {
//                        // 请求异常
//                        if (clientExcepion != null) {
//                            // 本地异常如网络异常等
//                            clientExcepion.printStackTrace()
//                        }
//                        if (serviceException != null) {
//                            // 服务异常
//                            Log.e("ErrorCode", serviceException.errorCode)
//                            Log.e("RequestId", serviceException.requestId)
//                            Log.e("HostId", serviceException.hostId)
//                            Log.e("RawMessage", serviceException.rawMessage)
//                        }
//                        ToastUtils.showToast("图片上传失败，请重新上传!")
//                        callback?.onFailure()
//                    }
//                })
//        }
//    }
//
//    fun upFile(file: File, mType: String? = "") {
//        if (oss == null) {
//            init(object : Cb {
//                override fun success() {
//                    uploadFile(file)
//                }
//
//                override fun error() {
//                    ToastUtils.showToast("初始化失败！")
//                    callback?.onFailure()
//                }
//            })
//            return
//        }
//
//        mType.isNullOrEmpty().no {
//            typeTag = "$mType/"
//        }
//
//        val mPhone: String = UserHelper.getUser()?.Phone.toString()
//        mPhone.isEmpty().no {
//            typeTag = "$mPhone/$mType/"
//        }
//
//        uploadFile(file)
//    }
//
//
//
//    fun uploadBitmap(bitmap: Bitmap, mType: String? = "") {
//        if (oss == null) {
//            init(object : Cb {
//                override fun success() {
//                    beginupload(bitmap)
//                }
//
//                override fun error() {
//                    ToastUtils.showToast("上传失败!")
//                    callback?.onFailure()
//                }
//            })
//            return
//        }
//
//        mType.isNullOrEmpty().no {
//            typeTag = "$mType/"
//        }
//
//        val mPhone: String = UserHelper.getUser()?.Phone.toString()
//        mPhone.isEmpty().no {
//            typeTag = "$mPhone/$mType/"
//        }
//
//        beginupload(bitmap)
//    }
//    fun beginupload(bitmap: Bitmap) {
//
//        val objectMeta = ObjectMetadata()
//        objectMeta.contentType = "image/jpeg"
//
////        val objectKey: String = objectKeyHeader + typeTag + file.name
//
//        val curFileName = "IMG_" + SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) + ".jpg"
//        val objectKey: String = objectKeyHeader + typeTag + curFileName
//
////        // 将 Bitmap 转换成 InputStream
////        val baos = ByteArrayOutputStream()
////        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
////        val inputStream: InputStream = ByteArrayInputStream(baos.toByteArray())
//
//        // 构造上传请求。
//        val putObjectRequest = PutObjectRequest(Constants.bucket, objectKey, bitmapToBytes(bitmap))
//        putObjectRequest.metadata = objectMeta
//
//        // 异步上传时可以设置进度回调。
//        putObjectRequest.progressCallback =
//            OSSProgressCallback { request, currentSize, totalSize -> }
//        ossAsyncTask = oss?.asyncPutObject(
//            putObjectRequest,
//            object : OSSCompletedCallback<PutObjectRequest?, PutObjectResult?> {
//                override fun onSuccess(request: PutObjectRequest?, result: PutObjectResult?) {
//                    oss?.presignPublicObjectURL(Constants.bucket, curFileName)?.let {
////                        callback?.getPicData(url)
//                        callback?.getPicData(arrayListOf("$bucketUrl${objectKey}"))
//                    }
//                }
//
//                override fun onFailure(
//                    request: PutObjectRequest?,
//                    clientExcepion: ClientException?,
//                    serviceException: ServiceException?
//                ) {
//                    callback?.onFailure()
//                    // 请求异常。
//                    if (clientExcepion != null) {
//                        // 本地异常，如网络异常等。
////                    clientExcepion.printStackTrace();
//                        ToastUtils.showToast(AppUtils.getString(R.string.network_framework_data_error))
//                    }
//                    if (serviceException != null) {
//                        // 服务异常。
//                        Log.e("ErrorCode", serviceException.errorCode)
//                        Log.e("RequestId", serviceException.requestId)
//                        Log.e("HostId", serviceException.hostId)
//                        Log.e("RawMessage", serviceException.rawMessage)
////                        ToastUtils.showToast("服务异常:" + serviceException.errorCode + "-" + serviceException.rawMessage)
//                    }
//                }
//            })
//
////        ossAsyncTask.cancel(); // 可以取消任务
//        // ossAsyncTask.waitUntilFinished(); // 等待任务完成
//    }
//
//    // 将 Bitmap 转换成字节数组
//    fun bitmapToBytes(bitmap: Bitmap): ByteArray? {
//        val outputStream = ByteArrayOutputStream()
//        bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
//        val byteArray = outputStream.toByteArray()
//        try {
//            outputStream.flush()
//            outputStream.close()
//        } catch (e: IOException) {
//            e.printStackTrace()
//        }
//        return byteArray
//    }
//    fun uploadFile(file: File) {
//        val url: MutableList<String> = ArrayList()
//        //        credentialProvider = new OSSStsTokenCredentialProvider(AccessKeyId, SecretKeyId, SecurityToken);
////        conf = new ClientConfiguration();
////        conf.setConnectionTimeout(15 * 1000); // 连接超时，默认15秒
////        conf.setSocketTimeout(15 * 1000); // socket超时，默认15秒
////        conf.setMaxConcurrentRequest(5); // 最大并发请求数，默认5个
////        conf.setMaxErrorRetry(2); // 失败后最大重试次数，默认2次
////        oss = new OSSClient(context, endpoint, credentialProvider, conf);
//
//        //            Logger.i("mFileName："+file.getName()+"文件大小："+file.length());
//
//        val objectMeta = ObjectMetadata()
//        objectMeta.contentType = "image/jpeg"
//
//        val objectKey: String = objectKeyHeader + typeTag + file.name
//        // 构造上传请求。
//        val putObjectRequest = PutObjectRequest(Constants.bucket, objectKey, file.path)
//        putObjectRequest.metadata = objectMeta
//
//        // 异步上传时可以设置进度回调。
//        putObjectRequest.progressCallback =
//            OSSProgressCallback { request, currentSize, totalSize -> }
//        ossAsyncTask = oss?.asyncPutObject(
//            putObjectRequest,
//            object : OSSCompletedCallback<PutObjectRequest?, PutObjectResult?> {
//                override fun onSuccess(request: PutObjectRequest?, result: PutObjectResult?) {
//                    url.clear()
//                    oss?.presignPublicObjectURL(Constants.bucket, file.name)?.let {
//                        url.add(it)
////                        callback?.getPicData(url)
//                        callback?.getPicData(arrayListOf(objectKey))
//                    }
//                }
//
//                override fun onFailure(
//                    request: PutObjectRequest?,
//                    clientExcepion: ClientException?,
//                    serviceException: ServiceException?
//                ) {
//                    callback?.onFailure()
//                    // 请求异常。
//                    if (clientExcepion != null) {
//                        // 本地异常，如网络异常等。
////                    clientExcepion.printStackTrace();
//                        ToastUtils.showToast(AppUtils.getString(R.string.network_framework_data_error))
//                    }
//                    if (serviceException != null) {
//                        // 服务异常。
//                        Log.e("ErrorCode", serviceException.errorCode)
//                        Log.e("RequestId", serviceException.requestId)
//                        Log.e("HostId", serviceException.hostId)
//                        Log.e("RawMessage", serviceException.rawMessage)
////                        ToastUtils.showToast("服务异常:" + serviceException.errorCode + "-" + serviceException.rawMessage)
//                    }
//                }
//            })
//
////        ossAsyncTask.cancel(); // 可以取消任务
//        // ossAsyncTask.waitUntilFinished(); // 等待任务完成
//    }
//
//
//    /**
//     * 删除单个
//     */
//    fun deleteFile(objectKey: String?) {
//        objectKey.isNullOrEmpty().no {
//            // 构造删除请求。
//            val deleteObjectRequest = DeleteObjectRequest(Constants.bucket, objectKey)
//            ossAsyncTask = oss?.asyncDeleteObject(
//                deleteObjectRequest,
//                object : OSSCompletedCallback<DeleteObjectRequest?, DeleteObjectResult?> {
//                    override fun onSuccess(request: DeleteObjectRequest?, result: DeleteObjectResult?) {
//                    }
//
//                    override fun onFailure(
//                        request: DeleteObjectRequest?,
//                        clientException: ClientException?,
//                        serviceException: ServiceException?
//                    ) {
//                        callback?.onFailure()
//                        // 请求异常。
//                        if (clientException != null) {
//                            // 本地异常，如网络异常等。
////                    clientExcepion.printStackTrace();
//                            ToastUtils.showToast(AppUtils.getString(R.string.network_framework_data_error))
//                        }
//                        if (serviceException != null) {
//                            // 服务异常。
//                            Log.e("ErrorCode", serviceException.errorCode)
//                            Log.e("RequestId", serviceException.requestId)
//                            Log.e("HostId", serviceException.hostId)
//                            Log.e("RawMessage", serviceException.rawMessage)
////                            ToastUtils.showToast("服务异常:" + serviceException.errorCode + "-" + serviceException.rawMessage)
//                        }
//                    }
//                })
//        }
//    }
//
//    fun deleteFile(objectKey: List<String>) {
//        objectKey.forEach {
//            // 构造删除请求。
//            val deleteObjectRequest = DeleteObjectRequest(Constants.bucket, it)
//            oss?.deleteObject(deleteObjectRequest)
//        }
//    }
//
//
//    fun getOSSAsyncTask(): OSSAsyncTask<*>? {
//        return ossAsyncTask
//    }
//
//    interface picResultCallback {
//        fun getPicData(path: List<String>?)
//        fun onFailure()
//    }
}